package com.mawujun.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
import java.util.List;

import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;

import com.sun.org.apache.commons.logging.Log;
import com.sun.org.apache.commons.logging.LogFactory;

public class DBToolkit{
	private  final Log log = LogFactory.getLog(DBToolkit.class); 
    private  String url = null; 

    private  String username = null; 
    private  String password = null; 
    private  String driverClassName = null; 
    
    private static HashMap<String, JdbcTemplate> jdbcTemplates=new  HashMap<String, JdbcTemplate>();
    private  static HashMap<String, PlatformTransactionManager>  transactionManagers=new  HashMap<String, PlatformTransactionManager>();;

    


    public JdbcTemplate getJdbcTemplate(String dbName) {
    	if(jdbcTemplates.get(dbName)==null){
    		BasicDataSource dataSource=new BasicDataSource();
        	dataSource.setUrl(url+dbName);
        	dataSource.setDriverClassName(driverClassName);
        	dataSource.setUsername(username);
        	dataSource.setPassword(password);
        	JdbcTemplate jdbct=new JdbcTemplate(dataSource);
        	
        	PlatformTransactionManager transaction=new DataSourceTransactionManager(dataSource);
        	transactionManagers.put(dbName, transaction);
        	jdbcTemplates.put(dbName, jdbct);
    	}
    	
    	return jdbcTemplates.get(dbName);

    }
    public PlatformTransactionManager  getTransactionManager (String dbName){
    	return transactionManagers.get(dbName);
    }

//    /** 
//     * 创建一个数据库连接 
//     * 
//     * @return 一个数据库连接 
//     * @throws SQLException 
//     */ 
//    public  Connection getConnection(String dbName) throws SQLException {
//    	
//    	
//    	 try { 
//             Class.forName(driverClassName);
//     } catch (ClassNotFoundException e) { 
//             log.error("#ERROR# :加载数据库驱动异常，请检查！", e); 
//     } 
//            Connection conn = null; 
//            //创建数据库连接 
//            try { 
//                    conn = DriverManager.getConnection(url+dbName, username, password); 
//            } catch (SQLException e) { 
//                    log.error("#ERROR# :创建数据库连接发生异常，请检查！", e);
//                    throw e;
//            } 
//            return conn; 
//    } 
//
//    /** 
//     * 在一个数据库连接上执行一个静态SQL语句查询 
//     * 
//     * @param conn            数据库连接 
//     * @param staticSql 静态SQL语句字符串 
//     * @return 返回查询结果集ResultSet对象 
//     * @throws SQLException 
//     */ 
//    public  ResultSet executeQuery(Connection conn, String staticSql) throws SQLException { 
//            ResultSet rs = null; 
//            try { 
//                    //创建执行SQL的对象 
//                    Statement stmt = conn.createStatement(); 
//                    //执行SQL，并获取返回结果 
//                    rs = stmt.executeQuery(staticSql); 
//            } catch (SQLException e) { 
//                    log.error("#ERROR# :执行SQL语句出错，请检查！\n" + staticSql, e); 
//                    throw e;
//            } 
//            return rs; 
//    } 
//    
//    public  int executeForInt(Connection conn, String staticSql) throws SQLException { 
//        ResultSet rs = null; 
//        int count=0;
//        try { 
//                //创建执行SQL的对象 
//                Statement stmt = conn.createStatement(); 
//                //执行SQL，并获取返回结果 
//                rs = stmt.executeQuery(staticSql); 
//                
//                while(rs.next()){
//                	count=rs.getInt(1);
//                }
//        } catch (SQLException e) { 
//                log.error("#ERROR# :执行SQL语句出错，请检查！\n" + staticSql, e); 
//                throw e;
//        } 
//        return count; 
//} 
//
//    /** 
//     * 在一个数据库连接上执行一个静态SQL语句 
//     * 
//     * @param conn            数据库连接 
//     * @param staticSql 静态SQL语句字符串 
//     * @throws SQLException 
//     */ 
//    public  void executeSQL(Connection conn, String staticSql) throws SQLException { 
//            try { 
//                    //创建执行SQL的对象 
//                    Statement stmt = conn.createStatement(); 
//                    //执行SQL，并获取返回结果 
//                    stmt.execute(staticSql); 
//            } catch (SQLException e) { 
//                    log.error("#ERROR# :执行SQL语句出错，请检查！\n" + staticSql, e); 
//                    throw e;
//            } 
//    } 
//
///** 
//     * 在一个数据库连接上执行一批静态SQL语句 
//     * 
//     * @param conn        数据库连接 
//     * @param sqlList 静态SQL语句字符串集合 
// * @throws SQLException 
//     */ 
//    public  void executeBatchSQL(Connection conn, List<String> sqlList) throws SQLException { 
//            try { 
//                    //创建执行SQL的对象 
//                    Statement stmt = conn.createStatement(); 
//                    for (String sql : sqlList) { 
//                            stmt.addBatch(sql); 
//                    } 
//                    //执行SQL，并获取返回结果 
//                    stmt.executeBatch(); 
//            } catch (SQLException e) { 
//                    log.error("#ERROR# :执行批量SQL语句出错，请检查！", e);
//                    e.printStackTrace();
//                    throw e;
//            } 
//    } 
//
//    public  void closeConnection(Connection conn) throws SQLException { 
//            if (conn == null) return; 
//            try { 
//                    if (!conn.isClosed()) { 
//                            //关闭数据库连接 
//                            conn.close(); 
//                    } 
//            } catch (SQLException e) { 
//                    log.error("#ERROR# :关闭数据库连接发生异常，请检查！", e); 
//                    throw e;
//            } 
//    }

	public  String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public  String getUsername() {
		return username;
	}

	public  void setUsername(String username) {
		this.username = username;
	}

	public  String getPassword() {
		return password;
	}

	public  void setPassword(String password) {
		this.password = password;
	}

	public  String getDriverClassName() {
		return driverClassName;
	}

	public  void setDriverClassName(String driverClassName) {
		this.driverClassName = driverClassName;
	} 

}
